#pragma once

#include <Eigen/Dense>

namespace  ldl
{
namespace autograd
{
template <typename T>
T square(T x) {
    return std::pow(x, 2);
}
template<typename T>
T ones_like(T data) {
    return T(1);
}

template<typename T>
T zeros_like(T data) {
    return T(0);
}

Eigen::MatrixXd ones_like(const Eigen::MatrixXd& data);

Eigen::MatrixXd zeros_like(const Eigen::MatrixXd& data);

Eigen::MatrixXf ones_like(const Eigen::MatrixXf& data);

Eigen::MatrixXf zeros_like(const Eigen::MatrixXf& data);
}
}
